package avs.sistemaavs.controller; 

import java.util.*;
import avs.sistemaavs.model.*;

public class ControladoraDevolucao {

	ArrayList<Integer> numeroCatalogoFilmes = new ArrayList<Integer>();
	Locadora locadora = new Locadora();
	Aluguel a1 = null, a2 = null;
	Cliente c1 = null, c2 = null;
	ControladoraBusca b = new ControladoraBusca();

	/**Metodo Longo
	 * 
	 */
	//testado,ok
	public int realizarDevolucao(Locadora locadora, int numeroCartaoAVS){	
		double valorLocacao = 0;

		if(locadora.getAluguel().isEmpty()){
			return 0;
		}else{

			/*
			 * Metodo atualizarQuantidadeVideos extraido
			 */
			atualizarQuantidadeVideos(locadora, numeroCartaoAVS);

			a1 = b.BuscaAluguel(locadora, a2, numeroCartaoAVS);
			if(a1 != null){
				locadora.getAluguel().remove(a1);
			}

			/*
			 * Metodo atualizarValorDevido extraido
			 */
			atualizarValorDevido(locadora, numeroCartaoAVS, valorLocacao);
		}

		return 0;


	}

	private void atualizarValorDevido(Locadora locadora, int numeroCartaoAVS,
			double valorLocacao) {
		c1 = b.BuscaCliente(locadora, c2, numeroCartaoAVS);
		if(c1.getValorDevido() > valorLocacao){
			c1.setValorDevido(c1.getValorDevido()-valorLocacao);
		}else{
			c1.setValorDevido(0);
		}
	}

	private void atualizarQuantidadeVideos(Locadora locadora, int numeroCartaoAVS) {
		numeroCatalogoFilmes.addAll(b.BuscaAluguel(locadora, a1, numeroCartaoAVS).getFilmes());
		Video v1, v2 = null;
		Iterator<Integer> it = b.BuscaNumeroCatalogo(numeroCatalogoFilmes);
		while (it.hasNext()){
			v1 = b.BuscaVideo(locadora, v2, it.next());
			if(v1 != null)
				v1.setQuantidade(v1.getQuantidade()+1);
		}
	}

        
	public boolean verificarPendenciaCliente(Locadora locadora, int numeroCartaoAVS){
		if(locadora.getAluguel().isEmpty()){
			return true;
		}else{
			
			a1 = b.BuscaAluguel(locadora, a2, numeroCartaoAVS);	 
			if(a1 != null){
				return false;
			}else{
				return true;
			}	
		}
	}

	public double calcularMulta(Locadora locadora, int numeroCartaoAVS, Calendar c){
		double multa = 0.0;
		
		a1 = b.BuscaAluguel(locadora, a2, numeroCartaoAVS);
		if(a1 != null){	
			/*
			 * campo temporario removido
			 * //Date data = c.getTime();
			 */
			if (c.getTime().after(a1.getDataDevolucao())){  
				multa = 5.0;
			}
		}

		/*
		 * Metodo atualizarValorDevidoMulta extraido
		 */
		atualizarValorDevidoMulta(locadora, numeroCartaoAVS, multa);

		return multa;

	}

	private void atualizarValorDevidoMulta(Locadora locadora, int numeroCartaoAVS, double multa) {
		c1 = b.BuscaCliente(locadora, c2, numeroCartaoAVS);
		c1.setValorDevido(c1.getValorDevido() + multa);
	}

}
